草庐IT

C++ 对和指针

全部标签

c++ - 在同一指针上多次使用 "new"

当我做类似的事情时会发生什么int*ptr=newint;*ptr=5;//...dosomestuffhereptr=newint;//...reuseptrtodosomeotherstuff相对于int*ptr1=newint;*ptr1=5;//...dosomestuffheredeleteptr1;int*ptr2=newint;//...useptr2now????同样的事情会发生在硬件层面吗?换句话说,在第一种情况下,ptr=newint;是否从其先前的指针/值对继续前进,那些旧值会发生什么变化?它们会被替换吗?它们会漂浮在某个地方吗? 最佳

c++ - 包裹在智能指针中的类的运算符重载

我一直在尝试对包含在智能指针中的类进行一些运算符重载(*和+)。autop=std::make_unique>();当我尝试使用正常重载对其进行重载时,它显然需要智能指针类型。编辑,所以:std::unique_ptr>operator+(conststd::unique_ptr>&right);templatestd::unique_ptr>Polynomial::operator+(conststd::unique_ptr>&right){//Dostuff}错误:那么当类被封装在智能指针中时,您如何着手重载普通运算符呢? 最佳答案

c++ - NULL 指针与 static_cast 的兼容性

Q1。为什么在static_cast中使用NULL指针会导致崩溃,而dynamic_cast和reinterpret_cast会返回NULL指针?问题发生在类似于下面给出的方法中:voidA::SetEntity(B*pEntity,intiMyEntityType){switch(iMyEntityType){caseENTITY1:{Set1(static_cast(pEntity));return;}caseENTITY2:{Set2(static_cast(pEntity));return;}caseENTITY3:{Set3(static_cast(pEntity));ret

c++ - 在指向同一对象的两个指针上调用 delete

我在尝试编写几个事件处理程序类时遇到了问题。基本上,想法是为每个逻辑对象组创建一个事件处理程序类。在大多数情况下,事件发生在对象及其处理程序之间,但在某些情况下,事件也在处理程序对象之间发送。我编写的代码将事件放置在堆栈上(堆栈,就像在用户创建的结构中;事件本身使用new分配)和删除d在他们的信息被阅读并采取行动之后。这给我带来了一些问题,因为在一种情况下,事件是沿着三个处理程序的链发送的。例如,HandlerA发送一个newEvent给HandlerB,后者将它放在堆栈上并读取它,然后将它发送给HandlerC,它读取它并执行它需要执行的任何操作,之后它删除事件指针并将其设置为NUL

c++ - 改变指针变量的内容

在这段代码中:#includeintmain(){constchar*name="Abc";std::cout如何更改指针变量的内容,而不是它指向的内容?而且,为什么我只是得到A作为该程序的输出?谢谢。 最佳答案 你得到一个char因为你正在取消引用一个char*指针。您可以通过以下方式更改内容:*a='B';//yourchar*wouldcontain"Bbc"a[0]='B';//yourchar*wouldcontain"Bbc"a[1]='B';//yourchar*wouldcontain"ABc"a[2]='B';//

特定位大小的 C++ 指针

我的问题是关于指向奇数大小的内存块。假设我有一个像这样声明的struct:typedefstruct{int32val1:29;int32val2:26;charval3;}MyStruct;让我们假设在结构中声明特定的位字段是可取的(为什么我们要使用位字段不是问题)。如果我想声明一个指向这些字段之一的指针,我可能会尝试这样的事情:MyStructtest;int32*myPtr=&(test.val1);除了这会产生错误“不允许使用位字段的地址”。假设我们想要,有没有办法以这种方式指向这些字段?我知道C++可能会将字段填充到下一个字节(在本例中为32位)。

c++ - 在 C++ 中保存指向迭代器的指针是否安全?

我会先问问题,再问动机,最后是按预期编译和执行的说明性代码示例。问题如果我可以确保迭代器在我需要使用它的期间内不会失效,那么保存指向迭代器的指针(例如指向list::iterator的指针)是否安全。动机我有多个容器,我需要从一个容器中的项目直接交叉引用到另一个容器中的相应项目等等。一个容器中的项目可能并不总是在另一个容器中有相应的项目。因此,我的想法是将指向容器#2中元素的迭代器的指针存储在容器#1中存储的元素中,依此类推。为什么?因为一旦有了迭代器,我不仅可以访问容器#2中的元素,而且如果需要,我还可以删除容器#2中的元素等。如果容器#2中有相应的元素,我将在容器#1中的元素中存储

c++ - 我必须删除这些指针吗?

这是我调用并使用函数show()使其对用户可见的MainWindow类。classMainWindow:publicQMainWindow{Q_OBJECTQWidget*centralWidget;QGridLayout*gridLayout;QGridLayout*infoBoxLayout;QHBoxLayout*buttonGroup;QHBoxLayout*subCategoryLayout;//...morewidgetspublic:MainWindow(QWidget*parent=0);~MainWindow();voidsetupUi();voidsetupConn

c++ - 指针越过对象的末尾是什么意思?

在C++Primer的第2章“变量和基本类型”中,它说:itispossibleforapointertoanobjectandapointeronepasttheendofadifferentobjecttoholdthesameaddress.我不是母语人士,我认为这就是为什么我对“一个指向对象末尾的指针”这句话有点困惑的原因。谁能告诉我这是什么意思? 最佳答案 表示之后inta[]={1,2};floatb;(void*)&a[2]==(void*)&b可能比较为真。&a[2](或等效地,a+2)是刚好超过a末尾的指针,因为数

c++ - C++ 数组是通过引用传递还是通过指针传递?

在学校里,我们的讲师告诉我们,当我们将整个数组传递给函数时,整个数组都是通过引用传递的。不过,最近看了一本书。它说当将整个数组传递给函数时,数组默认通过pointer传递。书中进一步提到“通过指针传递与通过引用传递非常相似”,这意味着通过指针传递和通过引用传递实际上是不同的。看来不同的来源表述不同。所以我的问题是:在C++中,当我们将整个数组传递给函数时,数组是通过引用传递还是通过指针传递?例如:voidfuncA(int[]);//FunctionDeclarationintmain(){intarray[5];funcA(array);//Isarraypassedbyreforb